package br.zeus.lemenu

class Menu {
	String nome
	boolean ativo

	Map itemIndicacao

	static hasMany = [itemIndicacao: Item]

	static constraints = {
		nome(blank: false, unique: true, minSize: 3, maxSize: 50)
	}
	
	String toString() {
		return nome
	}
	
	void adicionarItem(Item item, Item indicacao) {
		if(!item.getCategoria().equals(indicacao.getCategoria())) {
			itemIndicacao.put(item.nome, indicacao)
			itemIndicacao.put(indicacao.nome, item)
		} else {
			throw new Exception("Categorias iguais");
		}
	}
	
	void adicionarItem(Item item) {
		itemIndicacao.put(item.nome, item)
	}
	
	void removerItemEIndicacao(Item item) {
		def indicacao = itemIndicacao.get(item)
		itemIndicacao.remove(item)
		itemIndicacao.remove(indicacao)
	}
	
	void removerItem(Item item) {
		def indicacao = itemIndicacao.get(item)
		if(indicacao != null) {
			itemIndicacao.put(indicacao.nome, indicacao)
		}
		
		itemIndicacao.remove(item)
	}
	
	Map itemIndicacao() {
		HashMap<Item, Item> itens = new HashMap<Item, Item>()
		Set<String> chaves = this.itemIndicacao?.keySet()
		for(String chave : chaves) {
			def key = Item.findByNome(chave)
			def value = itemIndicacao.get(chave)
			if(key.id != value.id) {
				itens.put(Item.findByNome(chave), itemIndicacao.get(chave))
			} else {
				itens.put(Item.findByNome(chave), null)
			}
		}
		
		return itens
	}
}
